<?php

namespace app\common\job;

use app\common\model\Consulting;
use think\queue\Job;

/**
 * 咨询结束
 * Class ConsultingEnd
 * @package app\common\job
 */
class ConsultingEnd
{

    /**
     * fire是消息队列默认调用的方法
     * @param Job $job 当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        $id = $data['id'] ?? null;

        $consulting = Consulting::where('id', $id)->find();

        if (is_null($consulting) || $consulting->isEnd != 0) {
            $job->delete();
            return;
        }

        if($consulting->rushStatus == 0){
            // 未分配律师的

            $lastTime = $consulting->lastActiveTime;
            $lastTime += 48 * 3600;
            if ($lastTime <= time()) {
                // 超过48小时了，很久都没有分配律师，或者没人抢单

                $consulting->isEnd = 1;
                $consulting->save();

                // 触发咨询结束事件
                event('ConsultingEnded', $consulting);

                $job->delete();
                return;
            } else {
                // 延迟重试

                $job->release($lastTime - time() + 5);
                return;
            }

        }elseif($consulting->rushStatus == 1){
            // 已分配但是无回复的

            $lastTime = $consulting->lastActiveTime;
            $lastTime += 24 * 3600;
            if ($lastTime <= time()) {
                // 超过24小时了，可能是没给钱的咨询，律师抢单后没有回复，不会加入抢单池，就卡住了

                $consulting->isEnd = 1;
                $consulting->save();

                // 触发咨询结束事件
                event('ConsultingEnded', $consulting);

                $job->delete();
                return;
            } else {
                // 延迟重试

                $job->release($lastTime - time() + 5);
                return;
            }

        }elseif($consulting->rushStatus == 2){
            // 已回复的

            $lastTime = $consulting->lastActiveTime;
            if ($lastTime <= time()) {
                // 超过了最后活动时间，立即结束

                $consulting->isEnd = 1;
                $consulting->save();

                // 触发咨询结束事件
                event('ConsultingEnded', $consulting);

                $job->delete();
                return;
            } else {
                // 延迟重试

                $job->release($lastTime - time() + 5);
                return;
            }
        }else{
            // 其他情况

            // 24小时后重试
            $job->release(24 * 3600);
            return;
        }

        $job->delete();
    }

}